Versi 1
| Field | Isi |
|---|---|
| Dokumen ID | VBS-PJL-006 |
| Deskripsi | Pencatatan pesanan penjualan (Sales Order) dari customer tanpa metode pembayaran, dengan status draft/final, penyelesaian, pesan ulang, dan penerusan ke invoice penjualan dari Sales Order |
| Nomor Revisi | 1 |
| Tanggal | 2026-10-04 |
| Keterangan | Dokumentasi baseline dari dokumentasi fitur demo dan kode FE |
1. Ringkasan
a. In scope
- User melihat daftar Sales Order (tanggal, nomor invoice, customer, cabang, status)
- User melihat ringkasan pesanan belum diproses dan pesanan selesai 30 hari terakhir
- User memfilter daftar berdasarkan nomor invoice, tanggal, customer, cabang, dan status (selesai / draft / belum selesai)
- User membuat Sales Order: tanggal, customer, cabang, sales, dan baris barang, disimpan sebagai draft atau final, tanpa metode pembayaran
- User mengubah Sales Order draft dan dapat langsung meneruskannya ke penjualan
- User meneruskan Sales Order final ke invoice penjualan dari Sales Order
- User menyelesaikan Sales Order (membatalkan sisa qty), atau memesan ulang sisa barang lalu menutup SO lama
- User menghapus Sales Order draft dan mencetak Sales Order
b. Catatan
c. Kesimpulan
- [FE] -
- [BE] -
2. Functional Requirement
| Kode | Deskripsi |
|---|---|
| FR-01 | Sistem menampilkan daftar Sales Order dengan kolom tanggal, nomor invoice, customer, cabang, dan status |
| FR-02 | Sistem menampilkan ringkasan pesanan belum diproses dan selesai 30 hari terakhir bagi user dengan hak ringkasan |
| FR-03 | User dapat memfilter daftar berdasarkan nomor invoice, tanggal, customer, cabang, dan status |
| FR-04 | User dapat membuat Sales Order dengan baris barang tanpa metode pembayaran, sebagai draft atau final |
| FR-05 | User dapat mengubah Sales Order draft |
| FR-06 | User dapat meneruskan Sales Order final berstatus belum selesai ke invoice penjualan dari SO |
| FR-07 | User dapat menyelesaikan Sales Order dengan membatalkan sisa qty yang belum terkirim |
| FR-08 | User dapat memesan ulang sisa barang ke Sales Order baru sekaligus menutup SO lama |
| FR-09 | User dapat menghapus Sales Order draft dan mencetak Sales Order final |
3. Use Case List
| Kode | Deskripsi |
|---|---|
| UC-01 | Melihat daftar dan ringkasan Sales Order |
| UC-02 | Memfilter daftar Sales Order |
| UC-03 | Membuat Sales Order |
| UC-04 | Mengubah Sales Order draft |
| UC-05 | Meneruskan Sales Order ke penjualan |
| UC-06 | Menyelesaikan Sales Order |
| UC-07 | Memesan ulang sisa barang dan menutup Sales Order |
| UC-08 | Menghapus Sales Order draft |
| UC-09 | Mencetak Sales Order |
4. Use Case Scenario
UC-01 : Melihat daftar dan ringkasan Sales Order
| Aktor | User dengan hak lihat Sales Order |
| Deskripsi | User melihat daftar SO dan ringkasan pesanan |
| Prekondisi | User sudah login Brand aktif |
| Alur utama | 1. User membuka menu Sales Order. 2. Sistem menampilkan ringkasan pesanan belum diproses dan selesai 30 hari terakhir. 3. Sistem menampilkan daftar SO. |
| Alur negatif | - Jika tidak ada data, tampil daftar kosong. - Jika gagal memuat ringkasan, nilai ringkasan 0. |
| Bisnis rule | - Ringkasan hanya untuk hak #summary-penjualan.- Tanpa hak lihat semua ( #so all), daftar dibatasi SO user sendiri.- Nilai belum diproses dihitung dari sisa qty SO; nilai selesai dari qty terkirim. |
| Postkondisi | Daftar dan ringkasan tampil |
| Trigger | User membuka menu Sales Order |
| Kode FR | FR-01 FR-02 |
UC-02 : Memfilter daftar Sales Order
| Aktor | User dengan hak lihat Sales Order |
| Deskripsi | User menyaring daftar SO |
| Prekondisi | Halaman daftar terbuka |
| Alur utama | 1. User mencari nomor invoice atau membuka Filter. 2. User memilih tanggal, customer, cabang, dan/atau status. 3. Sistem memuat ulang daftar. |
| Alur negatif | - Jika tidak ada data cocok, tampil daftar kosong. |
| Bisnis rule | - Status draft = SO belum final; belum selesai = SO final yang masih memiliki sisa qty; selesai = SO final yang sudah ditutup. |
| Postkondisi | Daftar tampil sesuai filter |
| Trigger | User mengubah filter |
| Kode FR | FR-03 |
UC-03 : Membuat Sales Order
| Aktor | User dengan hak tambah Sales Order |
| Deskripsi | User mencatat pesanan customer |
| Prekondisi | User memiliki hak #so basic |
| Alur utama | 1. User klik Tambah. 2. User mengisi tanggal, customer, cabang, dan sales. 3. User menambah baris barang (barang, satuan, qty, harga, diskon, keterangan). 4. User klik Simpan Draft atau Simpan Final, lalu konfirmasi untuk final. 5. Sistem membuat SO dengan status belum selesai. |
| Alur negatif | - Jika informasi belum valid, muncul "Tolong lengkapi form dengan benar!". - Jika rincian belum valid, muncul "Isi terlebih dahulu Form Rincian Barang/Jasa dengan benar!". - Jika gagal, muncul "Gagal membuat Sales Order. error : ...". |
| Bisnis rule | - SO tidak memiliki metode pembayaran; pembayaran dipilih saat SO diteruskan ke penjualan. - Sales adalah karyawan dengan peran sales / marketing. - Setiap baris otomatis disetujui dan sisa qty SO awal = qty pesanan. |
| Postkondisi | SO tersimpan sebagai draft atau final |
| Trigger | User klik Simpan |
| Kode FR | FR-04 |
UC-04 : Mengubah Sales Order draft
| Aktor | User dengan hak tambah Sales Order |
| Deskripsi | User memperbarui SO yang masih draft |
| Prekondisi | SO berstatus draft |
| Alur utama | 1. User memilih Edit. 2. Sistem memuat SO dan barisnya. 3. User mengubah data lalu menyimpan draft, final, atau simpan sekaligus buat penjualan. 4. Sistem memperbarui SO. 5. Jika memilih buat penjualan, sistem membuka form penjualan dari SO. |
| Alur negatif | - Validasi informasi dan rincian sama seperti pembuatan SO. |
| Bisnis rule | - Edit hanya tersedia untuk SO draft. |
| Postkondisi | SO terbarui |
| Trigger | User klik Edit lalu Simpan |
| Kode FR | FR-05 |
UC-05 : Meneruskan Sales Order ke penjualan
| Aktor | User dengan hak tambah penjualan |
| Deskripsi | User membuat invoice penjualan dari SO final |
| Prekondisi | SO final berstatus belum selesai User memiliki hak #penjualan basic |
| Alur utama | 1. User memilih "Masukkan Penjualan atas SO ini". 2. Sistem membuka form penjualan dari Sales Order dengan SO terpilih. 3. Proses berlanjut di fitur Transaksi Penjualan (VBS-PJL-001). |
| Alur negatif | - Menu tidak tampil untuk SO draft atau SO selesai. |
| Bisnis rule | - Pembayaran dipilih di invoice penjualan, bukan di SO. |
| Postkondisi | Form penjualan dari SO terbuka |
| Trigger | User klik Masukkan Penjualan atas SO ini |
| Kode FR | FR-06 |
UC-06 : Menyelesaikan Sales Order
| Aktor | User dengan hak tambah Sales Order |
| Deskripsi | User menutup SO dan membatalkan sisa qty yang belum terkirim |
| Prekondisi | SO final berstatus belum selesai |
| Alur utama | 1. User memilih "Selesaikan SO". 2. Sistem meminta konfirmasi "Selesaikan Sales Order?". 3. User mengonfirmasi. 4. Sistem mengubah status SO menjadi selesai dan mencatat sisa qty sebagai dibatalkan. 5. Muncul "Sales Order Berhasil diselesaikan". |
| Alur negatif | - Jika gagal, muncul "Gagal Selesaikan Sales Order. Error: ...". |
| Bisnis rule | - Sisa qty SO setiap baris dicatat sebagai qty_cancelled. |
| Postkondisi | SO berstatus selesai |
| Trigger | User klik Selesaikan SO |
| Kode FR | FR-07 |
UC-07 : Memesan ulang sisa barang dan menutup Sales Order
| Aktor | User dengan hak tambah Sales Order |
| Deskripsi | User memindahkan sisa barang SO lama ke SO baru (back order) |
| Prekondisi | SO final berstatus belum selesai dengan sisa qty |
| Alur utama | 1. User memilih "Pesan Ulang & Tutup SO". 2. Sistem menampilkan baris SO beserta sisa qty. 3. User memilih barang yang akan dipesan ulang lalu klik Pesan Ulang. 4. Sistem membuka form SO baru dengan barang terpilih. 5. User menyimpan SO baru. 6. Sistem membuat SO baru lalu memperbarui SO lama dengan referensi back order. |
| Alur negatif | - Jika SO lama gagal dimuat, muncul pesan error dan modal tertutup. - Jika simpan gagal, muncul "Gagal membuat Sales Order. error : ...". |
| Bisnis rule | - Sisa qty barang yang dipesan ulang dicatat dibatalkan di SO lama. |
| Postkondisi | SO baru tersimpan dan SO lama tertutup untuk barang terpilih |
| Trigger | User klik Pesan Ulang & Tutup SO |
| Kode FR | FR-08 |
UC-08 : Menghapus Sales Order draft
| Aktor | User dengan hak draft Sales Order |
| Deskripsi | User menghapus SO draft |
| Prekondisi | SO berstatus draft |
| Alur utama | 1. User memilih Hapus. 2. Sistem meminta konfirmasi "Hapus Invoice ...". 3. User mengonfirmasi. 4. Sistem menghapus SO dan menampilkan "Invoice Sales Order Berhasil dihapus". |
| Alur negatif | - Jika gagal, muncul "Gagal Menghapus Invoice Sales Order. Error: ...". |
| Bisnis rule | - Hapus hanya untuk SO draft dan hak draft #so. |
| Postkondisi | SO terhapus |
| Trigger | User klik Hapus |
| Kode FR | FR-09 |
UC-09 : Mencetak Sales Order
| Aktor | User dengan hak reprint Sales Order |
| Deskripsi | User mencetak dokumen SO |
| Prekondisi | SO berstatus final |
| Alur utama | 1. User memilih Cetak Nota. 2. Sistem menandai SO tercetak dan memuat detail SO. 3. Sistem menampilkan modal cetak. |
| Alur negatif | - Jika gagal, modal cetak tidak tampil. |
| Bisnis rule | - Cetak ulang mengikuti hak reprint dan riwayat cetak. |
| Postkondisi | SO tercetak |
| Trigger | User klik Cetak Nota |
| Kode FR | FR-09 |
5. Data Flow Diagram
DFD-01
6. Sequence Diagram
SD-01 — UC-01 : Melihat daftar dan ringkasan Sales Order
SD-02 — UC-02 : Memfilter daftar Sales Order
SD-03 — UC-03 : Membuat Sales Order
SD-04 — UC-04 : Mengubah Sales Order draft
SD-05 — UC-05 : Meneruskan Sales Order ke penjualan
SD-06 — UC-06 : Menyelesaikan Sales Order
SD-07 — UC-07 : Memesan ulang sisa barang dan menutup Sales Order
SD-08 — UC-08 : Menghapus Sales Order draft
SD-09 — UC-09 : Mencetak Sales Order
7. Table Schema
8. API Schema
| Endpoint | Status | Perubahan |
|---|---|---|
GET /invoice-so | existing | - |
GET /invoice-so/:id | existing | - |
POST /invoice-so | existing | - |
PUT /invoice-so/:id | existing | - |
PUT /invoice-so/invoice-only/:id | existing | - |
DELETE /invoice-so/:id | existing | - |
POST /laporan-penjualan/invoice-soreport | existing | - |